package com.yuelao.yuelao_backend.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yuelao.yuelao_backend.entity.json.AuthData;
import com.yuelao.yuelao_backend.entity.json.BasicInfo;
import lombok.Data;

import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 用户基础信息表
 */
@Data
@TableName("users")
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 手机号
     */
    private String phone;

    /**
     * 密码（加密）
     */
    private String password;

    /**
     * 昵称
     */
    private String nickname;

    /**
     * 真实姓名
     */
    private String realName;

    /**
     * 性别: male, female, other
     */
    private String gender;

    /**
     * 生日
     */
    private LocalDate birthday;

    /**
     * 年龄（计算字段）
     */
    private Integer age;

    /**
     * 头像URL
     */
    private String avatar;

    /**
     * 邮箱
     */
    private String email;

    /**
     * 微信openid
     */
    private String wechatOpenid;

    /**
     * 微信unionid
     */
    private String wechatUnionid;

    /**
     * QQ openid
     */
    private String qqOpenid;

    /**
     * 微信号
     */
    private String wechat;

    /**
     * QQ号
     */
    private String qq;

    /**
     * 是否VIP: 0-否, 1-是
     */
    private Boolean isVip;

    /**
     * VIP类型ID（关联vip_plans表）
     */
    private Long vipPlanId;

    /**
     * VIP过期时间
     */
    private LocalDateTime vipExpireTime;

    /**
     * 账号状态: 0-禁用, 1-正常, 2-冻结
     */
    private Integer status;

    /**
     * 是否完成引导: 0-否, 1-是
     */
    private Boolean isCompleted;

    /**
     * 最后登录时间
     */
    private LocalDateTime lastLoginTime;

    /**
     * 最后登录IP
     */
    private String lastLoginIp;

    /**
     * 创建时间
     */
    private LocalDateTime createdAt;

    /**
     * 更新时间
     */
    private LocalDateTime updatedAt;
    
    /**
     * 获取认证数据（兼容方法）
     * @return 认证数据对象
     */
    public AuthData getAuthData() {
        AuthData authData = new AuthData();
        authData.setPasswordHash(this.password);
        // 其他字段可以从其他表或字段中获取
        return authData;
    }
    
    /**
     * 设置认证数据（兼容方法）
     * @param authData 认证数据对象
     */
    public void setAuthData(AuthData authData) {
        if (authData != null) {
            if (authData.getPasswordHash() != null) {
                this.password = authData.getPasswordHash();
            }
        }
    }
    
    /**
     * 获取基本信息（兼容方法）
     * @return 基本信息对象
     */
    public BasicInfo getBasicInfo() {
        BasicInfo basicInfo = new BasicInfo();
        basicInfo.setNickname(this.nickname);
        basicInfo.setAvatarUrl(this.avatar);
        basicInfo.setGender(this.gender);
        basicInfo.setBirthday(this.birthday);
        // 可以根据需要添加更多字段的映射
        return basicInfo;
    }
    
    /**
     * 获取关注数（兼容方法）
     * 注意：这是一个简化实现，实际应该从关系表中查询
     * @return 关注数
     */
    public Integer getFollowingCount() {
        return 0; // 简化实现，实际应该查询数据库
    }
    
    /**
     * 获取粉丝数（兼容方法）
     * 注意：这是一个简化实现，实际应该从关系表中查询
     * @return 粉丝数
     */
    public Integer getFollowerCount() {
        return 0; // 简化实现，实际应该查询数据库
    }
    
    /**
     * 获取浏览数（兼容方法）
     * 注意：这是一个简化实现，实际应该从访客表中查询
     * @return 浏览数
     */
    public Integer getViewCount() {
        return 0; // 简化实现，实际应该查询数据库
    }
    
    /**
     * 设置关注数（兼容方法）
     * 注意：这是一个空实现，实际应该更新关系表
     * @param followingCount 关注数
     */
    public void setFollowingCount(Integer followingCount) {
        // 简化实现，实际应该更新数据库
    }
    
    /**
     * 设置粉丝数（兼容方法）
     * 注意：这是一个空实现，实际应该更新关系表
     * @param followerCount 粉丝数
     */
    public void setFollowerCount(Integer followerCount) {
        // 简化实现，实际应该更新数据库
    }
    
    /**
     * 设置浏览数（兼容方法）
     * 注意：这是一个空实现，实际应该更新访客表
     * @param viewCount 浏览数
     */
    public void setViewCount(Integer viewCount) {
        // 简化实现，实际应该更新数据库
    }
}